package qhit.util;


import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.List;

/**
 * TODO
 *
 * @author 村头老杨头
 * @version 1.0
 * @date 2021/9/28 9:13
 */
public class BeanHandler {
    /**
     * @param clz  实体类的反射对象
     * @param rs   ResultSet 结果集对象
     * @return  实体类的对象
     */
    public static List handler(Class<?> clz, ResultSet rs) throws Exception{
        List<Object> list = new ArrayList<>();
        while (rs.next()){
            //创建对象
            Object obj = clz.newInstance();
//        1、ResultSetMetaData元数据类，获得表所有的字段名
            ResultSetMetaData rsmd = rs.getMetaData();
            for (int i = 1; i <= rsmd.getColumnCount(); i++) {
                //表中的字段名
                String columnName = rsmd.getColumnName(i);
//              2、通过结果集rs.getObject(字段名)，获得字段对应的数据值
                Object columnValue = rs.getObject(columnName);
//              3、获得真实类的字段的反射对象Field, Field field = clz.getDeclaredField(字段名)
                Field field = clz.getDeclaredField(columnName);
//              4、通过字段反射对象Field.set(真实对象,数据值)，设置属性值。
                field.setAccessible(true);
                field.set(obj,columnValue);
            }
            //添加对象到集合中
            list.add(obj);
        }
        return list;
    }

}
